#pragma once
/**
 * 校园智能快递集散系统
 * 程序设计基础课程设计(2024级)
 *
 * 本文件包含通知系统控制台界面接口
 */

#ifndef NOTIFICATION_UI_H
#define NOTIFICATION_UI_H

#include "system_types.h"
#include "noticement_system.h"

/**
 * @brief 获取控制台尺寸
 * @param column 宽度
 * @param rows 高度
 */
void getConsoleSize(int* column, int* rows);

/**
 * 显示用户通知控制台界面
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @return 执行结果错误码
 */
ErrorCode showNotificationConsole(SystemData* data, User* currentUser);

/**
 * 显示用户所有通知列表
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @param filterType 通知类型过滤器(0表示所有类型)
 * @param readStatus 通知状态过滤器(0=全部, 1=未读, 2=已读)
 * @param pageSize 每页显示的通知数量
 * @param currentPage 当前页码(从1开始)
 * @return 执行结果错误码
 */
ErrorCode displayUserNotifications(SystemData* data, User* currentUser,
    int filterType, int readStatus,
    int pageSize, int* currentPage);

/**
 * 查看通知详情
 *
 * @param data 系统数据结构指针
 * @param notificationID 通知ID
 * @param currentUser 当前登录用户
 * @return 执行结果错误码
 */
ErrorCode viewNotificationDetail(SystemData* data, const char* notificationID, User* currentUser);

/**
 * 标记通知为已读/未读
 *
 * @param data 系统数据结构指针
 * @param notificationID 通知ID
 * @param markAsRead 1=标记为已读, 0=标记为未读
 * @param currentUser 当前登录用户
 * @return 执行结果错误码
 */
ErrorCode toggleNotificationReadStatus(SystemData* data, const char* notificationID,
    int markAsRead, User* currentUser);

/**
 * 批量标记通知为已读
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @param type 通知类型(0表示所有类型)
 * @return 执行结果错误码
 */
ErrorCode markAllNotificationsAsRead(SystemData* data, User* currentUser, int type);

/**
 * 删除通知
 *
 * @param data 系统数据结构指针
 * @param notificationID 通知ID
 * @param currentUser 当前登录用户
 * @return 执行结果错误码
 */
ErrorCode deleteNotification(SystemData* data, const char* notificationID, User* currentUser);

/**
 * 批量删除通知
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @param readStatus 通知状态(0=全部, 1=未读, 2=已读)
 * @return 执行结果错误码
 */
ErrorCode deleteAllNotifications(SystemData* data, User* currentUser, int readStatus);

/**
 * 搜索用户通知
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @param keyword 搜索关键词
 * @return 执行结果错误码
 */
ErrorCode searchUserNotifications(SystemData* data, User* currentUser, const char* keyword);

/**
 * 显示通知统计信息
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @return 执行结果错误码
 */
ErrorCode showNotificationStatistics(SystemData* data, User* currentUser);

/**
 * 通知管理菜单(管理员用)
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @return 执行结果错误码
 */
ErrorCode notificationAdminConsole(SystemData* data, User* currentUser);

/**
 * 显示通知类型描述
 *
 * @param type 通知类型
 * @return 通知类型的字符串描述
 */
const char* getNotificationTypeString(int type);

/**
 * 创建并发送系统通知
 *
 * @param data 系统数据结构指针
 * @param receiverPhone 接收者手机号(NULL表示发送给所有用户)
 * @param message 通知内容
 * @param currentUser 当前登录用户(需要管理员权限)
 * @return 执行结果错误码
 */
ErrorCode sendSystemNotification(SystemData* data, const char* receiverPhone,
    const char* message, User* currentUser);

/**
 * 显示未读通知数量
 *
 * @param data 系统数据结构指针
 * @param currentUser 当前登录用户
 * @return 未读通知数量
 */
int getUnreadNotificationCount(SystemData* data, User* currentUser);

/**
 * 生成通知内容预览
 *
 * @param notification 通知对象指针
 * @param maxLength 最大长度
 * @return 通知内容预览字符串
 */
char* getNotificationPreview(Notification* notification, int maxLength);

/**
 * 检查用户是否有通知权限
 *
 * @param notification 通知对象指针
 * @param user 用户对象指针
 * @return 1=有权限, 0=无权限
 */
int hasNotificationAccess(Notification* notification, User* user);

/**
 * 绘制通知控制台界面框架
 *
 * @param title 标题
 */
void drawNotificationConsoleFrame(const char* title);

/**
 * 格式化通知时间
 *
 * @param createTime 通知创建时间
 * @param buffer 输出缓冲区
 * @param bufferSize 缓冲区大小
 */
void formatNotificationTime(time_t createTime, char* buffer, size_t bufferSize);

#endif // NOTIFICATION_UI_H